package com.app.conrtoller;

import com.alibaba.fastjson.JSON;
import com.app.domain.ExternalResponse;
import com.app.domain.UploadParameter;
import com.app.domain.YjData;
import com.app.domain.hsy.SendMessage;
import com.app.domain.jwjb.*;
import com.app.service.SendMessageService;
import com.app.service.UploadParameterService;
import com.app.service.UploadService;
import com.app.service.YjDataService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/jwybefb")
public class JwybefbUploadController {
    @Value("${yj.jwybefb.serviceHost}")
    private String serviceHost;
    @Value("${yj.jwybefb.refreshTokenHost}")
    private String refreshTokenHost;
    @Value("${yj.jwybefb.yjdeviceNumber}")
    private String yjdeviceNumber;
    @Value("${yj.jwybefb.proCode}")
    private String proCode;
    @Autowired
    YjDataService yjDataService;
    @Autowired
    UploadParameterService uploadParameterService;
    @Autowired
    UploadService uploadService;
    @Autowired
    SendMessageService sendMessageService;

    @RequestMapping("/upload")
    @ResponseBody
    public ExternalResponse upload(@RequestParam(value = "ids[]") String[] ids) throws InterruptedException {
        ExternalResponse externalResponse = null;
        //首先校验token是否过期,如果过期则将新的token写入配置文件
        RefreshTokenResult refreshTokenResult = uploadService.sendJwjbTokenMessage(refreshTokenHost);
        if (refreshTokenResult == null || refreshTokenResult.getCode() != 1) {
            externalResponse = new ExternalResponse(0, "token过期", "");
            return externalResponse;
        }
        String access_token = refreshTokenResult.getData().getToken();
        int total = ids.length;
        int succTotal = 0;
        int failTotal = 0;
        StringBuffer responseContent = new StringBuffer();
        responseContent.append("本次共上传数据：【" + total + "】条,");

        for (String id : ids) {

            YjData yjData = yjDataService.findOne(id);
            UploadParameter uploadParameter = uploadParameterService.findOne("4");
            String uuid = sendMessageService.ConditionQuery(id);
            if (StringUtils.isEmpty(uuid)) {
                List<Mudjack> mudjack = uploadService.getMudjack(yjData, uploadParameter,yjdeviceNumber,proCode);
                SaveDataResult saveDataResult = uploadService.sendJwjbMessage(access_token, "mudjack", JSON.toJSONString(mudjack), serviceHost);
                if ((saveDataResult.getCode()!=null)&&(saveDataResult.getCode().equals(1))) {
                    //主表上传成功
                    SendMessage sendMessage = new SendMessage();
                    sendMessage.setSbbh(yjData.getDevice_code());
                    sendMessage.setLh(yjData.getBridge_code());
                    sendMessage.setKh(yjData.getDuct_code());
                    sendMessage.setBusi_type("mudjack");
                    sendMessage.setUpload_time(new Date());
                    sendMessage.setUuid(mudjack.get(0).getId());
                    sendMessage.setStatus("0");
                    sendMessageService.insert(sendMessage);
                    List<MudjackItem> mudjackItem = uploadService.getMudjackItem(yjData, uploadParameter, mudjack.get(0).getId(), proCode);
                    SaveDataResult mudjackItemSaveDataResult = uploadService.sendJwjbMessage(access_token, "mudjackItem", JSON.toJSONString(mudjackItem), serviceHost);
                    if ((mudjackItemSaveDataResult.getCode()!=null)&&(mudjackItemSaveDataResult.getCode().equals(1))) {
                        List<MudjackItemList> mudjackItemList = uploadService.getMudjackItemList(yjData, mudjackItem.get(0).getHoleId(),yjdeviceNumber,proCode);
                        SaveDataResult mudjackItemListSaveDataResult = uploadService.sendJwjbMessage(access_token, "mudjackItemList", JSON.toJSONString(mudjackItemList), serviceHost);
                        if ((mudjackItemListSaveDataResult.getCode()!=null)&&(mudjackItemListSaveDataResult.getCode().equals(1))) {
                            updateState("1", String.valueOf(yjData.getId()));
                            succTotal++;
                        }else {
                            log.info("-------------压浆记录mudjackItemList数据发送失败------------------------");
                            updateState("0", String.valueOf(yjData.getId()));
                            failTotal++;
                        }
                    }else {
                        log.info("-------------压浆记录mudjackItem数据发送失败------------------------");
                        updateState("0", String.valueOf(yjData.getId()));
                        failTotal++;
                    }
                } else {
                    log.info("-------------压浆记录mudjack数据发送失败------------------------");
                    updateState("0", String.valueOf(yjData.getId()));
                    failTotal++;
                }
            }else {
                List<MudjackItem> mudjackItem = uploadService.getMudjackItem(yjData, uploadParameter, uuid, proCode);
                SaveDataResult mudjackItemSaveDataResult = uploadService.sendJwjbMessage(access_token, "mudjackItem", JSON.toJSONString(mudjackItem), serviceHost);
                if ((mudjackItemSaveDataResult.getCode()!=null)&&(mudjackItemSaveDataResult.getCode().equals(1))) {
                    List<MudjackItemList> mudjackItemLists = uploadService.getMudjackItemList(yjData, mudjackItem.get(0).getHoleId(),yjdeviceNumber,proCode);
                    SaveDataResult mudjackItemListSaveDataResult = uploadService.sendJwjbMessage(access_token, "mudjackItemList", JSON.toJSONString(mudjackItemLists), serviceHost);
                    if ((mudjackItemListSaveDataResult.getCode()!=null)&&(mudjackItemListSaveDataResult.getCode().equals(1))) {
                        updateState("1", String.valueOf(yjData.getId()));
                        succTotal++;
                    }else {
                        log.info("-------------压浆记录mudjackItemList数据发送失败------------------------");
                        updateState("0", String.valueOf(yjData.getId()));
                        failTotal++;
                    }
                }else {
                    log.info("-------------压浆记录mudjackItem数据发送失败------------------------");
                    updateState("0", String.valueOf(yjData.getId()));
                    failTotal++;
                }
            }
        }
        responseContent.append("成功【" + succTotal + "】条,失败" + failTotal + "条");
        externalResponse = new ExternalResponse(0, responseContent.toString(), "");
        return externalResponse;
    }

    private void updateState(String state, String id) {
        yjDataService.updateById(state, id);
    }
}
